// 加载marked.js库用于Markdown渲染
document.addEventListener('DOMContentLoaded', function() {
    // 检查用户是否已登录
    if (!getCurrentUser()) {
        window.location.href = 'login.html';
        return;
    }

    // 动态加载marked.js
    const script = document.createElement('script');
    script.src = 'https://cdn.jsdelivr.net/npm/marked/marked.min.js';
    document.head.appendChild(script);
    
    script.onload = function() {
        console.log('Marked.js loaded successfully');
        // 设置marked选项，允许渲染HTML
        marked.setOptions({
            breaks: true,
            gfm: true
        });
        
        // 初始化虚拟滚动
        initVirtualScroll();
        
        // 初始化文件上传
        initFileUpload();
        
        // 初始化消息搜索
        initMessageSearch();
        
        // 加载历史消息
        loadChatHistory();
    };
});

// 消息搜索管理器实例
let messageSearch;

// 初始化消息搜索
function initMessageSearch() {
    const searchInput = document.getElementById('searchInput');
    const searchButton = document.getElementById('searchButton');
    const closeSearchButton = document.getElementById('closeSearchButton');
    const searchResults = document.getElementById('searchResults');
    const searchBar = document.getElementById('searchBar');
    const settingsBar = document.getElementById('settingsBar');
    
    // 切换搜索栏显示状态
    function toggleSearch(show) {
        searchBar.classList.toggle('active', show);
        settingsBar.style.display = show ? 'none' : 'flex';
        searchResults.classList.toggle('active', show);
        
        if (show) {
            searchInput.focus();
        } else {
            searchInput.value = '';
            searchResults.innerHTML = '';
        }
    }
    
    // 搜索按钮点击事件
    searchButton.addEventListener('click', () => {
        toggleSearch(true);
    });
    
    // 关闭搜索按钮点击事件
    closeSearchButton.addEventListener('click', () => {
        toggleSearch(false);
    });
    
    // 初始化搜索管理器
    messageSearch = new MessageSearch({
        searchInput: searchInput,
        searchResultsContainer: searchResults,
        onResultClick: (index) => {
            // 跳转到指定消息
            virtualScroll.scrollToIndex(index);
            // 高亮显示消息
            highlightMessage(index);
            // 关闭搜索界面
            toggleSearch(false);
        }
    });
    
    // 更新搜索管理器的消息数据
    virtualScroll.onUpdate = (items) => {
        if (messageSearch) {
            messageSearch.updateMessages(items);
        }
    };
}

// 高亮显示消息
function highlightMessage(index) {
    // 移除之前的高亮
    const oldHighlights = document.querySelectorAll('.message-highlight');
    oldHighlights.forEach(el => el.classList.remove('message-highlight'));
    
    // 添加新高亮
    const messages = document.querySelectorAll('.message');
    if (messages[index]) {
        messages[index].classList.add('message-highlight');
        
        // 3秒后移除高亮
        setTimeout(() => {
            messages[index].classList.remove('message-highlight');
        }, 3000);
    }
}

// 文件上传管理器实例
let fileUploadManager;

// 初始化文件上传
function initFileUpload() {
    const uploadButton = document.getElementById('uploadButton');
    
    fileUploadManager = new FileUploadManager({
        chatInput: document.getElementById('userInput'),
        onFileSelect: handleSelectedFiles,
        maxFileSize: 20 * 1024 * 1024, // 20MB
        allowedTypes: [
            'image/jpeg',
            'image/png',
            'image/gif',
            'video/mp4',
            'audio/mpeg',
            'application/pdf'
        ]
    });
    
    uploadButton.addEventListener('click', () => {
        fileUploadManager.triggerFileSelect();
    });
}

// 处理选择的文件
function handleSelectedFiles(files) {
    // 临时禁用自动滚动到底部
    virtualScroll.setAutoScrollToBottom(false);
    
    // 为每个文件创建预览并上传
    files.forEach(file => {
        // 创建预览
        const preview = createFilePreview(file);
        const tempMessage = {
            id: `temp-${Date.now()}`,
            content: preview.outerHTML,
            sender: 'user',
            timestamp: new Date().toISOString()
        };
        
        // 添加到聊天界面
        virtualScroll.addItem(tempMessage);
        
        // 模拟上传过程
        simulateFileUpload(file, (uploadedFile) => {
            // 实际上传完成后替换临时消息
            replaceTempMessage(tempMessage.id, uploadedFile);
        });
    });
    
    // 重新启用自动滚动到底部
    virtualScroll.setAutoScrollToBottom(true);
}

// 模拟文件上传过程
function simulateFileUpload(file, callback) {
    // 在实际应用中，这里应该调用真实的上传API
    // 这里我们使用setTimeout模拟上传延迟
    
    // 创建进度条
    const progress = createProgressBar(file.size);
    const progressElement = progress.container;
    
    // 添加到聊天界面
    const chatMessages = document.getElementById('chatMessages');
    chatMessages.appendChild(progressElement);
    
    // 模拟上传进度
    let loaded = 0;
    const chunkSize = file.size / 100;
    
    const uploadInterval = setInterval(() => {
        loaded += chunkSize;
        if (loaded >= file.size) {
            loaded = file.size;
            clearInterval(uploadInterval);
            
            // 上传完成
            setTimeout(() => {
                progressElement.remove();
                callback({
                    url: URL.createObjectURL(file),
                    name: file.name,
                    type: file.type,
                    size: file.size
                });
            }, 500);
        }
        progress.update(loaded);
    }, 30);
}

// 替换临时消息
function replaceTempMessage(tempId, uploadedFile) {
    // 在实际应用中，这里应该使用上传后的文件URL
    const content = createFileMessageContent(uploadedFile);
    
    // 找到临时消息并替换
    const items = virtualScroll.items;
    const index = items.findIndex(item => item.id === tempId);
    
    if (index !== -1) {
        items[index].content = content;
        virtualScroll.setItems([...items]);
    }
}

// 创建文件消息内容
function createFileMessageContent(file) {
    const container = document.createElement('div');
    container.className = 'file-message';
    
    if (file.type.startsWith('image/')) {
        container.innerHTML = `
            <div class="file-preview">
                <img src="${file.url}" alt="${file.name}">
                <div class="file-info">
                    <span>${file.name}</span>
                    <a href="${file.url}" download="${file.name}" class="download-link">下载</a>
                </div>
            </div>
        `;
    }
    else if (file.type.startsWith('video/')) {
        container.innerHTML = `
            <div class="file-preview">
                <video controls>
                    <source src="${file.url}" type="${file.type}">
                </video>
                <div class="file-info">
                    <span>${file.name}</span>
                    <a href="${file.url}" download="${file.name}" class="download-link">下载</a>
                </div>
            </div>
        `;
    }
    else if (file.type.startsWith('audio/')) {
        container.innerHTML = `
            <div class="file-preview">
                <audio controls>
                    <source src="${file.url}" type="${file.type}">
                </audio>
                <div class="file-info">
                    <span>${file.name}</span>
                    <a href="${file.url}" download="${file.name}" class="download-link">下载</a>
                </div>
            </div>
        `;
    }
    else {
        container.innerHTML = `
            <div class="file-preview">
                <div class="file-icon">
                    <svg viewBox="0 0 24 24" width="48" height="48">
                        <path fill="currentColor" d="M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z"/>
                    </svg>
                </div>
                <div class="file-info">
                    <span>${file.name}</span>
                    <a href="${file.url}" download="${file.name}" class="download-link">下载</a>
                </div>
            </div>
        `;
    }
    
    return container.outerHTML;
}

// 虚拟滚动管理器实例
let virtualScroll;

// 初始化虚拟滚动
function initVirtualScroll() {
    const chatMessages = document.getElementById('chatMessages');
    
    // 创建虚拟滚动管理器
    virtualScroll = new VirtualScrollManager({
        container: chatMessages,
        renderItem: renderMessageItem,
        itemHeight: 80, // 估计每条消息高度
        overscan: 5, // 可视区域外预渲染的消息数量
        getItemKey: item => item.id
    });
    
    // 设置自动滚动到底部
    virtualScroll.setAutoScrollToBottom(true);
}

// 渲染单个消息项
function renderMessageItem(message, index) {
    const messageDiv = document.createElement('div');
    messageDiv.className = `message ${message.sender}`;
    
    const messageContent = document.createElement('div');
    messageContent.className = 'message-content';
    
    // 如果是机器人消息且marked已加载，则使用markdown渲染
    if (message.sender === 'bot' && window.marked) {
        messageContent.innerHTML = marked.parse(message.content);
    } else {
        messageContent.textContent = message.content;
    }
    
    messageDiv.appendChild(messageContent);
    return messageDiv;
}

// DeepSeek API配置
const DEEPSEEK_API_KEY = 'sk-833ff4345cef4eb38557ba752fbdeb9f';
const DEEPSEEK_API_URL = 'https://api.deepseek.com/v1/chat/completions';

// DOM元素
const chatMessages = document.getElementById('chatMessages');
const userInput = document.getElementById('userInput');
const sendButton = document.getElementById('sendButton');

// 事件监听器
sendButton.addEventListener('click', sendMessage);
userInput.addEventListener('keypress', function(e) {
    if (e.key === 'Enter') {
        sendMessage();
    }
});

// 发送消息函数
async function sendMessage() {
    const message = userInput.value.trim();
    if (!message) return;
    
    // 清空输入框
    userInput.value = '';
    
    // 添加用户消息到聊天界面
    addMessage(message, 'user');
    
    // 显示"小智正在输入..."
    const typingIndicator = addTypingIndicator();
    
    try {
        // 调用DeepSeek API
        const response = await callDeepSeekAPI(message);
        
        // 移除"正在输入"指示器
        removeTypingIndicator(typingIndicator);
        
        // 添加AI回复到聊天界面
        if (response) {
            addMessage(response, 'bot');
        } else {
            addMessage(getLocalizedString('sorry_problem'), 'bot');
        }
    } catch (error) {
        console.error('Error:', error);
        
        // 移除"正在输入"指示器
        removeTypingIndicator(typingIndicator);
        
        // 显示错误消息
        addMessage(getLocalizedString('error_occurred') + error.message, 'bot');
    }
}

// 添加消息到聊天界面
function addMessage(content, sender, saveToHistory = true) {
    const message = {
        id: Date.now(),
        content: content,
        sender: sender,
        timestamp: new Date().toISOString()
    };
    
    // 添加到虚拟滚动列表
    virtualScroll.addItem(message);
    
    // 保存到历史记录
    if (saveToHistory) {
        saveChatMessage(content, sender);
    }
}

// 添加"正在输入"指示器
function addTypingIndicator() {
    const typingDiv = document.createElement('div');
    typingDiv.className = 'message bot typing-indicator';
    
    const typingContent = document.createElement('div');
    typingContent.className = 'message-content';
    typingContent.textContent = getLocalizedString('typing');
    
    typingDiv.appendChild(typingContent);
    document.getElementById('chatMessages').appendChild(typingDiv);
    
    // 滚动到底部
    virtualScroll.scrollToBottom();
    
    return typingDiv;
}

// 移除"正在输入"指示器
function removeTypingIndicator(typingDiv) {
    if (typingDiv && typingDiv.parentNode) {
        typingDiv.parentNode.removeChild(typingDiv);
    }
}

// 调用DeepSeek API
async function callDeepSeekAPI(message) {
    try {
        const startTime = Date.now();
        
        // 获取历史消息用于上下文
        const chatHistory = getChatHistory();
        const contextMessages = [];
        
        // 添加系统消息
        contextMessages.push({
            role: "system",
            content: "你是一个名叫小智的AI助手，你的回答应该简洁、友好且有帮助。请使用Markdown格式来美化你的回答。"
        });
        
        // 添加最近的历史消息作为上下文（最多5条）
        const recentMessages = chatHistory.slice(-10); // 最多取最近10条消息
        for (const msg of recentMessages) {
            contextMessages.push({
                role: msg.sender === 'user' ? 'user' : 'assistant',
                content: msg.content
            });
        }
        
        // 添加当前用户消息
        contextMessages.push({
            role: "user",
            content: message
        });
        
        const response = await fetch(DEEPSEEK_API_URL, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${DEEPSEEK_API_KEY}`
            },
            body: JSON.stringify({
                model: "deepseek-chat",
                messages: contextMessages,
                temperature: 0.7,
                max_tokens: 2000
            })
        });
        
        if (!response.ok) {
            const errorData = await response.json();
            throw new Error(errorData.error?.message || '请求失败');
        }
        
        const data = await response.json();
        const aiResponse = data.choices[0].message.content;
        
        // 计算响应时间
        const responseTime = Date.now() - startTime;
        console.log(`API响应时间: ${responseTime}ms`);
        
        // 如果响应时间小于2秒，等待剩余时间以确保至少2秒的响应时间
        if (responseTime < 2000) {
            await new Promise(resolve => setTimeout(resolve, 2000 - responseTime));
        }
        
        return aiResponse;
    } catch (error) {
        console.error('API调用错误:', error);
        throw error;
    }
}

// 获取当前登录用户
function getCurrentUser() {
    try {
        const userJson = localStorage.getItem('currentUser');
        if (!userJson) return null;
        return JSON.parse(userJson);
    } catch (e) {
        console.error('解析用户信息失败', e);
        return null;
    }
}

// 获取用户的聊天历史
function getChatHistory() {
    try {
        const user = getCurrentUser();
        if (!user) return [];
        
        const key = `chatHistory_${user.username}`;
        const historyJson = localStorage.getItem(key);
        if (!historyJson) return [];
        
        return JSON.parse(historyJson);
    } catch (e) {
        console.error('获取聊天历史失败', e);
        return [];
    }
}

// 保存聊天消息到历史记录
function saveChatMessage(content, sender) {
    try {
        const user = getCurrentUser();
        if (!user) return;
        
        const key = `chatHistory_${user.username}`;
        const history = getChatHistory();
        
        // 添加新消息
        history.push({
            id: Date.now(),
            content: content,
            sender: sender,
            timestamp: new Date().toISOString()
        });
        
        // 限制历史记录数量，最多保存100条
        const limitedHistory = history.slice(-100);
        
        // 保存到localStorage
        localStorage.setItem(key, JSON.stringify(limitedHistory));
    } catch (e) {
        console.error('保存聊天消息失败', e);
    }
}

// 加载聊天历史到界面
function loadChatHistory() {
    try {
        // 获取历史消息
        const history = getChatHistory();
        
        if (history.length === 0) {
            // 如果没有历史消息，显示欢迎消息
            const welcomeMessage = {
                id: Date.now(),
                content: getLocalizedString('welcome_message'),
                sender: 'bot',
                timestamp: new Date().toISOString()
            };
            virtualScroll.setItems([welcomeMessage]);
            return;
        }
        
        // 准备虚拟滚动数据
        const messages = history.map(msg => ({
            id: msg.id || Date.now(),
            content: msg.content,
            sender: msg.sender,
            timestamp: msg.timestamp || new Date().toISOString()
        }));
        
        // 设置虚拟滚动数据
        virtualScroll.setItems(messages);
        
        // 滚动到底部
        virtualScroll.scrollToBottom();
    } catch (e) {
        console.error('加载聊天历史失败', e);
        // 显示欢迎消息
        const welcomeMessage = {
            id: Date.now(),
            content: getLocalizedString('welcome_message'),
            sender: 'bot',
            timestamp: new Date().toISOString()
        };
        virtualScroll.setItems([welcomeMessage]);
    }
}